/*
 * @Author: kaikaima
 * @Date: 2021-03-01 09:46:12
 * @LastEditTime: 2021-03-01 09:46:36
 * @LastEditors: Please set LastEditors
 * @Description: In User Settings Edit
 * @FilePath: /undefined/home/messi/Data_Structure_and_Algorithm_GIT/PAT/Basic_level/1008.cpp
 */
/*一个数组A中存有N（>0）个整数，在不允许使用另外数组的前提下，将每个整数循环向右移M（≥0）个位置，即将A中的数据由（A​0​​A​1​​⋯A​N−1​​）变换为（A​N−M​​⋯A​N−1​​A​0​​A​1​​⋯A​N−M−1​​）（最后M个数循环移至最前面的M个位置）。如果需要考虑程序移动数据的次数尽量少，要如何设计移动的方法？
  输入格式:
  每个输入包含一个测试用例，第1行输入N（1≤N≤100）和M（≥0）；第2行输入N个整数，之间用空格分隔。
  输出格式:
  在一行中输出循环右移M位以后的整数序列，之间用空格分隔，序列结尾不能有多余空格。*/
#include<iostream>

int main (int argc, char* argv[]){
    int M,N; std::cin>>N; std::cin>>M;
    int a[N];
    if(M>N) M=M%N;
    for(int i=0;i<N;i++)
        std::cin>>a[i];
    for(int i=M;i>0;i--)
        std::cout<<a[N-i]<<" ";
    for(int i=0;i<N-M-1;i++)
        std::cout<<a[i]<<" ";
    std::cout<<a[N-M-1];
    return 0;
}